工厂模式,常用的设计模式(创建型模式)及分类

来源:互联网 发布:读音软件 编辑:程序博客网 时间:2024/05/29 17:15

工厂模式的概念:(整个例子全部以女娲造人为例子,生动形象,再不懂那。。。)

工厂模式(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();

}


}












1 0
原创粉丝点击