设计模式之简单工厂模式

来源:互联网 发布:js删除input输入框 编辑:程序博客网 时间:2024/06/01 10:30

一.简单工厂模式
关于对象产生的问题:产生一个对象JAVA中最常用的方式就是直接用new的方式开辟一个新对象:
类名 对象名 = new 类名();
这种创建对象的方式的缺点:在客户端调用时必须明确知道有哪几个子类,直接造成了一个重要问题就是两个程序之间紧密耦合,程序缺乏可扩展性和可复用性。对此简单工厂模式引入了工厂类,可以解决客户端与具体子类之间的强耦合关系,由一个工厂类根据传入的参数动态的决定应该创建哪一个产品类的实例(这些产品类继承自同一个父类或接口)

 

二.简单工厂模式中包含的角色及其职责:
1.工厂角色(Creater):是简单工厂模式的核心,他负责创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需要的产品对象
2.抽象角色(Product):简单工厂模式所创建的所有对象的父类或接口,他负责描述有所实例的公共接口
3.具体产品角色(Concrete Product):简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例

 

三.举例:
追MM少不了请吃饭了,麦当劳的鸡翅和鸡腿都是MM最爱吃的东西,虽然口味有所不同,但当你带着她光临麦当劳时,不管MM要鸡腿还是鸡翅,只管向服务员说一声:来四个鸡翅,就行了,麦当劳就是生产鸡翅和鸡腿的Factory

 

/**
 * 抽象产品角色,提供所有产品所共有的方法
 * @author Administrator
 *
 */
public interface Chicken {

 public void price();
}


/**
 * 具体产品,鸡翅实现了父类的price()方法
 * @author Administrator
 *
 */
public class ChickenWing implements Chicken{

 @Override
 public void price() {
  System.out.println("鸡翅:2$...");
 }
}


/**
 * 具体产品,鸡腿类实现了父类的price()方法
 * @author Administrator
 *
 */
public class Drumstick implements Chicken{

 @Override
 public void price() {
  System.out.println("鸡腿:1$...");
 }
}


/**
 * 工厂类,提供具体产品的创建
 * @author Administrator
 *
 */
public class McDonaldFactory {

 public static Chicken getChickenWingInstance() {
  return new ChickenWing();
 }
 
 public static Drumstick getDrumstickInstance() {
  return new Drumstick();
 }
}

 

当你带着MM去消费时,就可以直接向McDonald这个大工厂要鸡翅,要鸡腿了……

//当MM跟你说想吃鸡翅的时候,你就跟工厂说一声来4个鸡翅,然后等着付钱就行了
Chicken c1 = McDonaldFactory.getChickenWingInstance();
c1.price();
//当MM跟你说想吃鸡腿的时候,你就跟工厂说一声来4个鸡腿,然后等着付钱就行了
Chicken c2 = McDonaldFactory.getDrumstickInstance();
c2.price();

原创粉丝点击