ITKeyword,专注技术干货聚合推荐

注册 | 登录

设计模式-工厂模式

hello0370 分享于 2014-11-06

推荐:2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)(设计模式笔记)

分类: 1:创建型模式: 单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式; 2:结构型模式: 适配器模式,桥接模式,装饰模式,组合模式,外观模式,享

2019阿里云双11返场狂欢继续,
地址https://www.aliyun.com/1111/2019/home

      工厂模式分为三种情况:简单工厂模式,工厂方法模式,抽象工厂模式,根据不同的场景选择相应的模式。

      简单工厂模式用于生产单一的产品,一般使用静态方法,根据传入的参数返回不同的对象实例。

      工厂方法模式,定义一个用于创建对象的接口,让子类决定创建哪个类,它使一个类型实例化延长到了子类。

      抽象方法模式,提供一系列创建相关或相互依赖对象的接口,而无需指定它们具体的类,通俗点说就是,一个工厂要生产多个产品,例如一个汽车厂要生产轮胎,生产照明灯,但是轮胎和照明灯又有不同的品牌。

简单工厂模式的实现

首先,一个Widget的接口,

public interface Widget {
	public void show();
}
其次,一个4x1和一个4x2的widget,
public class FourOneWidget implements Widget {
	public void show() {
		System.out.println("4x1 widget");
	}
}
public class FourTwoWidget implements Widget {
	public void show() {
		System.out.println("4x2 wiget");
	}
}
最后,来个创建Widget的工厂,
public class WidgetFactory {

	public static final String FOUR_ONE_TYPE = "4x1";
	public static final String FOUR_TWO_TYPE = "4X2";
	public static Widget createWidget(String type) {
		if(FOUR_ONE_TYPE.equals(type)) {
			return new FourOneWidget();
		} else if(FOUR_TWO_TYPE.equals(type)) {
			return new FourTwoWidget();
		}
		return null;
	}
}
这样一个简单的工厂方法就实现了,我们可以调用WidgetFactory的static方法来创建不同的Widget,但是每次调用都需要修改代码,也就是传递的参数type。

推荐:【设计模式】全局看 简单工厂 -工厂方法- 抽象工厂

前言 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,三个模式的变化只需我们掌握一个内功心法,就是在创建一个对象时,找出会变化的地方,

工厂方法模式的实现

首先,Widget以及FourOneWidget,FourTwoWidget的代码都是一样的(工厂方法的重点不是产品,而是生产产品的方式-_-),在这里对工厂做了抽象,然后派生出两个分别生产4x1和4x2widget的工厂,代码如下:

public interface WidgetFactory {

	public Widget createFactory();
}

public class FourOneWidgetFactory implements WidgetFactory {

	public Widget createFactory() {
		return new FourOneWidget();
	}
}

public class FourTwoWidgetFactory implements WidgetFactory {

	public Widget createFactory() {
		return new FourTwoWidget();
	}
}
这时候,我们再调用的时候就可以根据需求调用FourOneWidgetFactory或者FourTwoFactory了,而不用再修改代码。

抽象工厂方法的实现

首先一些需要生产的产品的类:

public interface Lamp {
	public void brand();
}
public class DZLamp implements Lamp {

	public void brand() {
		System.out.println("DZ Lamp");
	}
}
public class BMLamp implements Lamp {
	public void brand() {
		System.out.println("BM Lamp");
	}

}

public interface Wheel {
	public void brand();
}
public class DZWheel implements Wheel {

	public void brand() {
		System.out.println("DZ wheel");
	}
}
public class BMWheel implements Wheel {
	public void brand() {
		System.out.println("BM wheel");
	}
}
然后是不同的工厂,
public abstract class BMFactory {

	public abstract Wheel createBMWhell();
	public abstract Lamp createBMLamp();
}
public class BMOneFactory extends BMFactory {

	public Wheel createBMWhell() {
		return new BMWheel();
	}

	public Lamp createBMLamp() {
		return new BMLamp();
	}

}

public abstract class DZFactory {

	public abstract Lamp createDZLamp();
	public abstract Wheel createDZWheel();
}
public class DZOneFactory extends DZFactory {

	public Lamp createDZLamp() {
		return new DZLamp();
	}

	public Wheel createDZWheel() {
		return new DZWheel();
	}
}
最后,不同品牌的工厂生产相应的产品了。。





推荐:设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性

      工厂模式分为三种情况:简单工厂模式,工厂方法模式,抽象工厂模式,根据不同的场景选择相应的模式。       简单工厂模式用于生产单一的产品,一般使用静态方法,根据传入的参数返回不同

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。