工厂模式的概念:(整个例子全部以女娲造人为例子,生动形象,再不懂那。。。)
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
工厂模式的分类:
设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式);
简单工厂模式
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
创建的思路:
1,创建工厂接口,定义需要做的事情,
2,创建实体类,用于后边得到实体类对象,也就是产品的对象
3,实现工厂接口,在接口中,通过工厂判断出需要生产的对象,返回对象即可。
这里以生产人类为例子:
工厂接口:
public interface IPersonFactory{
Person BulidPerson(String type);
}
创建人类接口,当然可以不创建用object代替:
public interface Person{
}
男人和女人实体类:
public class Man extends Person{
}
public class Woman extands Person{
}
创建工厂实现类:通过不同的类型产生不同的人类
public class Factory implement IpersonFactory{
@overrid
public Person BuildPerson(String type){
if(type.equal("男人")){
return new Man();
}else if(type.equal("女人")){
return new Woman();
}
}
}
调用时::利用了多态的特点
创建工厂类:
Fatory factory=new Factory();
//返回男人对象
Person person=factory.BuildPerson("男人");
//返回女人对象
Person person=factory.BuildPerson("女人");
工厂方法模式
工厂方法模式其实非常的简单,怎么理解呢?就是和简单工厂模式差不多,简单工厂模式时同一个工厂根据你输入的类型返回不同的人类,而工厂方法模式是通过不同的对象而创建出不同的工厂,单独生产,也就是说,创建不同的工厂生产不同的商品
步骤:
1创建工厂接口
2创建不同的工厂
3创建不同实体类
4,在不同的工厂中生产不同的实体类对象
工厂接口:
public interface IPersonFactory{
Person BulidPerson();
}
创建人类接口,当然可以不创建用object代替:
public interface Person{
}
男人和女人实体类:
public class Man extends Person{
}
public class Woman extands Person{
}
创建不同的工厂分别生产男人和女人
public class ManFactory implement IPersonFactory{
@overrid
public Person BuildPerson(){
return new Man();
}
public class WomanFactory implement IPersonFactory{
@overrid
public Person BuildPerson(){
return new Woman();
}
调用的时候创建不同的工厂直接调用方法造人:
生产男人
ManFactory MF=new ManFactory();
Person Pman=MF.BuildPerson();
生产女人
WomanFactory WF=new WomanFactory();
Person Pwoman=WF.BulidPerson();
抽象工厂模式
也是所有的工厂模式中结合,可能对于新人而言有难度,但是看完我的例子你就不会迷茫了。。。。。
这里先简单的说两个刺词:“产品族”,“产品等级”;
什么是产品族?产品族就是某一种类型的产品,
什么是产品等及?产品等级就是在某一产品族的内部分了不同的等级,或者是不同的包装
这里我先举个例子:女娲创造了三种人,黑白黄,这三个人种就是三个产品族,这里你懂了吧?每一个人种中又有男人和女人,或者大人和小孩,这就可以认为是不同的产品等级,我想现在的你应该有这个概念了。
那么在抽象工厂模式中,应该如何创建相应的步骤来完成设计呢???
步骤,:::需求,创建不同人种的男人或者女人
1创建抽象工厂:(抽离出三个人种)
2,创建工厂的实体类,以性别划分
3,创建抽象人类(抽离出相同的属性)
4,创建抽象男人女人类
5,创建男人女人的实体类
下面开始:抽象人类工厂
public abstract PersonFactory{
//生产三个人种
void BulidBllackPerson();
voidildWidtePerson();
void BuildYellowPerson();
}
//创建抽象人类
public abstract class Person{
人类共同的功能
void eat();
void sleep();
}
创建三个人种抽象类
public abstract classWidtePerson() extands Person{
}
public abstract class BlackPerson() extands Person{
}
public abstract class YelloPerson() extands Person{
}
创建三个人种的男人女人实体类。实现方法,这里我不写了,太多了,纯手工scdn打的,没用编辑器
public class BlackMan extands Blaockerson{
}
public class BlackWoman extands BlackPerson{
}
public class WidteMan extands WidtePerson{
}
public class Widte WoMan extanceWidtePerson{
}
public class YellwMan extands YelloPerson{
}
public class YelloWoman extands YellwPerson{
}
以性别为等级划分创建工厂的实现类
public class WomanFactory impement PersonFactory{
创建三个人种的男性
public voidBuildBackPerson(){
return new BlackWoman();
}
public void BuildWidtePerson(){
return new WidteWoman();
}
public void BuildYellowPerson(){
return hew YellowWoman();
}
}
public class ManFactory impement PersonFactory{
创建三个人种的男性
public voidBuildBackPerson(){
return new BlackMan();
}
public void BuildWidtePerson(){
return new WidteMan();
}
public void BuildYellowPerson(){
return hew YellowMan();
}
}