首页 > 代码库 > Android 设计模式之创建型模式
Android 设计模式之创建型模式
工厂方法模式
定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.
工厂方法是一个类的实例化延迟到其子类
/*************************面包师*****************************/ //面包师类 public class BreadMaker{ public void getBread(){} } //黑面包 public class BlackBread extends BreadMaker{ @Override public void getBread(){ System.out.println("烤出黑面包"); } } //蜂蜜面包 public class HoneyBread extends BreadMaker{ @Override public void getBread(){ System.out.println("烤出蜂蜜面包"); } } //白面包 public class WhiteBread extends BreadMaker{ @Override public void getBread(){ System.out.println("烤出白面包"); } } /**********************工厂***********************************/ //工厂接口 interface IFactory { public BreadMaker createBread(); } //黑面包工厂 public class BlackBreadFactory implements IFactory{ @Override public BreadMaker createBread() { // TODO Auto-generated method stub return new BlackBread(); } } //蜂蜜面包工厂 public class HoneyBreadFactory implements IFactory{ @Override public BreadMaker createBread() { // TODO Auto-generated method stub return new HoneyBread(); } } //白面包工厂 public class WhiteBreadFactory implements IFactory{ @Override public BreadMaker createBread() { // TODO Auto-generated method stub return new WhiteBread(); } } /*************************** 客户端实现*******************************/ public static void main(String[] args){ //面包工厂 IFactory breadFactory; //面包师 BreadMaker breadMaker; //顾客要黑面包 breadFactory = new BlackBreadFactory();//实例化黑面包工厂 breadMaker = breadFactory.BlackBread();//实例化黑面包师 breadMaker.getBread();//制作黑面包 //顾客要蜂蜜面包 breadFactory = new HoneyBreadFactory();//实例化蜂蜜面包工厂 breadMaker = breadFactory.HoneyBread();//实例化蜂蜜面包师 breadMaker.getBread();//制作蜂蜜面包 //顾客要白面包 breadFactory = new WhiteBreadFactory();//实例化白面包工厂 breadMaker = breadFactory.WhiteBread();//实例化白面包师 breadMaker.getBread();//制作白面包 }
使用范围: 1.一个类不知道它所创建的对象的类时. 2. 一个类希望由它的子类来指定它所创建的对象时. 3. 类将创建对象的职责委托给多个子类中的某一个.
如果产品种类比较少可以运用其他更简单的方法,比如一种叫简单工厂模式的,如果产品种类比较丰富可以选择工厂方法模式
抽象工厂模式
定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.
代码示例: 如果还想要销售披萨饼, 而且面包师也会做披萨的话,在上面的工厂接口中添加 制作披萨的接口方法
PizzaMaker createPizza(); //在IFactory接口中添加 PizzaMaker 是披萨师类, 类似面包师类
使用范围: 1. 一个系列要独立于它的产品的创建,组合和表示时.
2. 一个系统要由多个产品系列的一个来配置时
3. 当要提供一个产品类库,而只要显示它们的接口而不是实现时
4. 要强调一系列相关的产品对象的设计以便进行联合使用时
缺点: 如果产品需求改变,可能会需要在声明过产品类的地方进行大量的修改. 可以通过反射+抽象工厂模式结合
Android 设计模式之创建型模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。