工厂模式:具体的可以分为两种,分别是工厂方法模式 、抽象工厂模式。
工厂方法模式:定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到了子类。
设计原则:依赖倒置原则(要依赖抽象,而不是依赖具体类)。
遵守依赖倒置原则的几个建议:
1.变量不可以持有具体类的引用(如果使用new,就会持有具体类的引用,可以改用工厂来避开这样的做法)
2.不要让类派生自具体类(如果派生自具体类,你就会依赖具体类,请派生自一个抽象【接口或者抽象类】)
3.不要覆盖基类中已实现的方法(如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象。基类中已实现的方法,应该由所有的子类共享)
比较好的解释: http://blog.csdn.net/wyxhd2008/article/details/5597975
具体的工厂方法模式代码:
/** * Created by Administrator on 2017/12/9. * 产品类 */ public abstract class Pizza { protected String name; protected String dough; protected void prepare(){ System.out.println("prepare"); } protected void cut(){ System.out.println("cut"); } protected void box(){ System.out.println("box"); } }
/** * Created by Administrator on 2017/12/9. * 创建类 */ public abstract class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza = createPizza(type); //让子类自己去实现 pizza.prepare(); pizza.cut(); pizza.box(); return pizza; } /** * 让子类去根据情况实现创建Pizza * */ protected abstract Pizza createPizza(String type); }
/** * Created by Administrator on 2017/12/9. * 具体的实现的pizza */ public class CheesetPizza extends Pizza { public CheesetPizza() { this.name = "chesse"; this.dough = "doughchesse"; } @Override public String toString() { return "CheesetPizza " + this.name + ", " + this.dough; } }
/** * Created by Administrator on 2017/12/9. * 具体的pizzaStore */ public class NYStylePizzaStore extends PizzaStore { @Override protected Pizza createPizza(String type) { Pizza pizza = null; if("Cheese".equals(type)){ //根据不同类型创造不同的pizza pizza = new CheesetPizza(); }/*else if("clam".equals(type)){ //其他类型的Pizza }*/ return pizza; } }
/** * Created by Administrator on 2017/12/9. */ public class TestFactoryMethod { public static void main(String[] args) { PizzaStore pizzaStore = new NYStylePizzaStore(); Pizza pizza = pizzaStore.orderPizza("Cheese"); System.out.println(pizza); } }
抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
/** * Created by Administrator on 2017/12/9. */ public abstract class Pizza { protected Dough dough; protected abstract void prepare(); protected void cut(){ System.out.println("cut"); } protected void box(){ System.out.println("box"); } }
public abstract class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza = createPizza(type); //让子类自己去实现 pizza.prepare(); pizza.cut(); pizza.box(); return pizza; } /** * 让子类去根据情况实现创建Pizza * */ protected abstract Pizza createPizza(String type); }
/** * Created by Administrator on 2017/12/9. * pizza原料工厂 */ public interface PizzaIngredientFactory { Dough createDough(); }
/** * Created by Administrator on 2017/12/9. * pizza的原料[可以变成接口,产生多个品种的Dough] */ public class Dough { private String dough; public String getDough() { return dough; } public void setDough(String dough) { this.dough = dough; } }
/** * Created by Administrator on 2017/12/9. */ public class CheesePizaa extends Pizza{ private PizzaIngredientFactory pizzaIngredientFactory ; public CheesePizaa(PizzaIngredientFactory pizzaIngredientFactory) { this.pizzaIngredientFactory = pizzaIngredientFactory; } @Override protected void prepare() { this.dough = pizzaIngredientFactory.createDough();//通过工厂来产生原料 } }
/** * Created by Administrator on 2017/12/9. */ public class NYPizzaStore extends PizzaStore { @Override protected Pizza createPizza(String type) { Pizza pizza = null; PizzaIngredientFactory pizzaIngredientFactory = new NYPizzaIngredientFactory(); if("Cheese".equals(type)){ pizza = new CheesePizaa(pizzaIngredientFactory); }/*else if("clam".equals(type)){ }*/ return pizza; } }
/** * Created by Administrator on 2017/12/9. */ public class NYPizzaIngredientFactory implements PizzaIngredientFactory{ @Override public Dough createDough() { return new Dough(); } }
相关推荐
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)
创建型设计模式----抽象工厂模式
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
java设计模式----抽象工厂模式,简单工厂模式代码 代码内部
抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
设计模式-抽象工厂模式(讲解及其实现代码)
java设计模式之抽象工厂模式,实例----手机工厂,一个简单的例子,有助于理解抽象工厂模式。
设计模式 - 抽象工厂模式
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是抽象工厂模式及应用场景和应用场景的代码事例。及各工厂模式的区别。
设计模式举例 抽象工厂模式 代码+用例图 设计模式, 设计模式举例-抽象工厂模式(有图有真相)
设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 要您一个资源分,也算是对我的尊重,谢谢下载。
c++设计模式-创建型-抽象工厂方法-最简单源码-qt工程
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂
设计模式,抽象工厂 基本要领
设计模式-抽象工厂模式javademo java小程序
IOS 设计模式抽象工厂实例Demo IOS 设计 模式 抽象 工厂
设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂...
采用六层架构+抽象工厂设计模式+反射机制搭建CRM项目框架