性冷淡风小结常用设计模式(五)------工厂模式

一、工厂模式
定义:工厂模式:为创建对象提供过度接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

工厂方法

1、当一个类不知道它所必须创建的对象的类的时候;

2、当一个类希望由它的子类来指定它所创建的对象的时候;

3、当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮组子类是代理者这一信息局部化的时候。

二、抽象工厂模式
定义:定义了一个接口,用于创建相关或者有依赖关系的对象族,而无需明确指定具体类。

抽象工厂

    1、一个系统应当不依赖于产品类实例被创立、组成和表示的细节,这对于所有形态的工厂模式都是重要的
    
    2、这个系统的产品有至少一个的产品族
    
    3、同属于一个产品族的产品是设计成在一起使用的,这一约束必须得在系统的设计中体现出来

    4、不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实现的细节

啥都不说了,上代码。场景为制作Pizza,有各种口味的,使用抽象工厂方法,实现了不同风味的pizza在不同地域生产、包装、运输等等。

首先,Pizza抽象工厂

public interface AbsFactory {
	public Pizza CreatePizza(String ordertype) ;
}

**然后,Pizza的工厂拓展类—LDFactory **

public class LDFactory implements AbsFactory {

	@Override
	public Pizza CreatePizza(String ordertype) {
		Pizza pizza = null;

		if (ordertype.equals("cheese")) {
			pizza = new LDCheesePizza();
		} else if (ordertype.equals("pepper")) {
			pizza = new LDPepperPizza();
		}
		return pizza;

	}

}

**然后,Pizza的工厂拓展类—NYFactory **

public class NYFactory implements AbsFactory {

	
	@Override
	public Pizza CreatePizza(String ordertype) {
		Pizza pizza = null;

		if (ordertype.equals("cheese")) {
			pizza = new NYCheesePizza();
		} else if (ordertype.equals("pepper")) {
			pizza = new NYPepperPizza();
		}
		return pizza;

	}

}

订购Pizza

public class OrderPizza {
	AbsFactory mFactory;

	public OrderPizza(AbsFactory mFactory) {

		setFactory(mFactory);
	}

	public void setFactory(AbsFactory mFactory) {
		Pizza pizza = null;
		String ordertype;

		this.mFactory = mFactory;

		do {
			ordertype = gettype();
			pizza = mFactory.CreatePizza(ordertype);
			if (pizza != null) {
				pizza.prepare();
				pizza.bake();
				pizza.cut();
				pizza.box();
			}

		} while (true);

	}

	private String gettype() {
		try {
			BufferedReader strin = new BufferedReader(new InputStreamReader(
					System.in));
			System.out.println("input pizza type:");
			String str = strin.readLine();

			return str;
		} catch (IOException e) {
			e.printStackTrace();
			return "";
		}
	}

}

测试一哈

public class PizzaStroe {
	public static void main(String[] args) {
		
		OrderPizza mOrderPizza;
		mOrderPizza=new	OrderPizza(new LDFactory());
		
	}
}

三、工厂方法模式和抽象工厂模式对比

1、工厂模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂模式的推广

2、工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构

3、工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类

 

工厂模式的优点:

1、系统可以在不修改具体工厂角色的情况下引进新的产品

2、客户端不必关心对象如何创建,明确了职责

3、更好的理解面向对象的原则,面向接口编程,而不是面向实现编程
--------------------- 
作者:BestWZR 
来源:CSDN 
原文:https://blog.csdn.net/zhimingshangyan/article/details/52349903 
版权声明:本文为博主原创文章,转载请附上博文链接!

四、依赖抽象原则

1. 变量不要持有具体类的引用
2. 不要让类继承自具体类,要继承自抽象类或者接口
3. 不要覆盖类中已实现的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值