今天给大家介绍《Java极简设计模式》的第02章,抽象工厂模式(AbstractFactoty),多一句没有,少一句不行,用最简短的篇幅讲述设计模式最核心的知识,好了,开始今天的内容。
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。
为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
图片
定义抽象工程类IAnimalFactory
public interface IAnimalFactory { /** * 定义创建Icat接口实例的方法 * @return */ ICat createCat(); /** * 定义创建IDog接口实例的方法 * @return */ IDog createDog();}
创建抽象工厂类的两个实现类,WhiteAnimalFactory和BlackAnimalFactory
public class WhiteAnimalFactory implements IAnimalFactory { public ICat createCat() { return new WhiteCat(); } public IDog createDog() { return new WhiteDog(); }}
public class BlackAnimalFactory implements IAnimalFactory { @Override public ICat createCat() { return new BlackCat(); } public IDog createDog() { return new BlackDog(); }}
定义抽象工厂中要生产的抽象产品接口ICat和IDog
public interface ICat { /** * 定义方法 */ void eat();}
public interface IDog { /** * 定义方法 */ void eat();}
创建产品的实现类BlackCat、BlackDog、WhiteCat、WhiteDog
public class BlackCat implements ICat { @Override public void eat() { System.out.println("The black cat is eating!"); }}
public class BlackDog implements IDog { @Override public void eat() { System.out.println("The black dog is eating"); }}
public class WhiteCat implements ICat { @Override public void eat() { System.out.println("The white cat is eating!"); }}
public class WhiteDog implements IDog { @Override public void eat() { System.out.println("The white dog is eating!"); }}
定义一个测试类Test
public class Test { public static void main(String[] args) { IAnimalFactory blackAnimalFactory = new BlackAnimalFactory(); ICat blackCat = blackAnimalFactory.createCat(); blackCat.eat(); IDog blackDog = blackAnimalFactory.createDog(); blackDog.eat(); IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory(); ICat whiteCat = whiteAnimalFactory.createCat(); whiteCat.eat(); IDog whiteDog = whiteAnimalFactory.createDog(); whiteDog.eat(); }}
The black cat is eating!The black dog is eatingThe white cat is eating!The white dog is eating!
由此可见,工厂方法确实为系统结构提供了非常灵活强大的动态扩展机制,只要我们更换一下具体的工厂方法,系统其他地方无需一点变换,就有可能将系统功能进行改头换面的变化。
本文链接:http://www.28at.com/showinfo-26-5195-0.html我们一起聊聊抽象工厂模式(AbstractFactoty)
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
下一篇: Go-Zero 是如何做路由管理的?