设计模式——(工厂模式)(抽象工厂模式)

工厂模式:

 简单工厂模式:

        简单示例(订购):传统方法
            优点:编写容易
            缺点:违背ocp原则,添加一个新的商品时,应修较少的修改代码。
        创建一个商品类

            package com.kun.gongchang;
            public abstract class Pizza {
                protected String name;
                public abstract void prepare();
                
                public void bake() {
                    System.out.println(name+" baking");
                }
                public void cut() {
                    System.out.println(name+" cuting");
                }
                public void box() {
                    System.out.println(name+" boxing");
                }
                public void setName(String name) {
                    this.name=name;
                }
            }

创建两个商品准备方法:

 public class GreekPizza extends Pizza{
                @Override
                public void prepare() {
                    System.out.println("zhun bei b");
                }
                
            }
            public class CheesePizza extends Pizza{
                @Override
                public void prepare() {
                    // TODO Auto-generated method stub
                    System.out.println("zhun bei a");
                }
                
            }

创建一个订单类:  

package com.kun.gongchang;
            import java.util.Scanner;
            public class OrderPizza {
                public OrderPizza() {
                    Pizza p=null;
                    String orderType;
                    do {
                        orderType=gettype();
                        if (orderType.equals("greek")) {
                            p=new GreekPizza();
                            p.setName("greek");
                        }else if(orderType.equals("cheese")){
                            p=new CheesePizza();
                            p.setName("cheese");
                        }else {
                            System.out.println("mei you");
                            break;
                        }
                        p.prepare();
                        p.bake();
                        p.cut();
                        p.box();
                    }while(true);
                }
                private String gettype() {
                    Scanner s= new Scanner(System.in);
                    System.out.print("shuru : ");
                    String type=s.next();
                    return type;
                }
            }

        最后:
            直接new一个订单类对象并输入商品。
        简单工厂模式:
            创建一个工厂类: 

 public class Factory {
                public Pizza createPizza(String orderType) {
                    Pizza pizza=null;
                    System.out.println("factory----");
                    if (orderType.equals("greek")) {
                        pizza=new GreekPizza();
                        pizza.setName("greek");
                    }else if(orderType.equals("cheese")){
                        pizza=new CheesePizza();
                        pizza.setName("cheese");
                    }
                    return pizza;
                }
            }

 修改订单里面的方法(使用聚合):

 Factory factory;
                Pizza pizza=null;
                public OrderPizza(Factory factory) {
                    setFactory(factory);
                }
                public void setFactory(Factory factory) {
                    String orderType="";
                    this.factory=factory;
                    do {
                        orderType=gettype();
                        pizza=this.factory.createPizza(orderType);
                        if (pizza!=null) {
                            pizza.prepare();
                            pizza.bake();
                            pizza.cut();
                            pizza.box();
                        }else {
                            System.out.println("shi  bai");
                            break;
                        }
                    } while (true);
                }

修改运行类:

  public class PizzaStore {
            public static void main(String[] args) {
                new OrderPizza(new Factory());
                System.out.println("00000");
            }
        }

 工厂方法模式:

        介绍:
            将项目的实例化功能抽象成抽象方法
            定义了一个创建对象的抽象方法,由子类决定实例化的类。对对象的实例化推迟到子类。
        实例:
            创建一个商品类

public abstract class Pizza {
                protected String name;
                public abstract void prepare();
                public void bake() {
                    System.out.println(name+" baking");
                }
                public void cut() {
                    System.out.println(name+" cuting");
                }
                public void box() {
                    System.out.println(name+" boxing");
                }
                public void setName(String name) {
                    this.name=name;
                }
            }

 分别创建两个地方,俩个种类的商品(一个地方的代码,另个一样)    

 public class TJCheesePizza extends Pizza{
                    @Override
                    public void prepare() {
                        setName("tian jing cheese");
                        System.out.println("TIAN JIN AAA");
                    }
                }
            ——————————————————————————————————————————————————
                public class TJPepperPizza extends Pizza{
                    @Override
                    public void prepare() {
                        // TODO Auto-generated method stub
                        setName("TIAN JIN pepper");
                        System.out.println("TIAN JIN BBB");
                    }
                }

 创建订单类

package com.kun.gongchangfangfa;
                import java.util.Scanner;
                public abstract class OrderPizza {
                    public OrderPizza() {
                        Pizza pizza=null;
                        String orderType;
                        do {
                            orderType=gettype();
                            pizza=createPizza(orderType);
                            pizza.prepare();
                            pizza.bake();
                            pizza.cut();
                            pizza.box();
                        }while(true);
                    }
                    abstract Pizza createPizza(String orderType);
                    
                    private String gettype() {
                        Scanner s= new Scanner(System.in);
                        System.out.print("shuru : ");
                        String type=s.next();
                        return type;
                    }
                }

 分别创建两个地方的订单类,继承订单类实现createPizza抽象方法(另一个相同)

  public class BJOrderPizza extends OrderPizza{
                    @Override
                    Pizza createPizza(String orderType) {
                        // TODO Auto-generated method stub
                        Pizza pizza=null;
                        if (orderType.equals("cheese")) {

                            pizza=new BJCheesePizza();
                        }else if(orderType.equals("pepper")){
                            pizza=new BJPepperPizza();
                        }
                        return pizza;
                    }

                }


            在商店类实现创建订单

  public class PizzaStore {
                    public static void main(String[] args) {
                        new BJOrderPizza();
                    }
                }

抽象工厂模式

介绍:
        定义一个交接口用于创建相关的对象
        抽象工厂模式可以将简单的工厂模式和工厂模式方法整合

创建一个接口

public interface AbsFactory {
	public Pizza createPizza(String orderType);
}

创建一个地区的工厂继承接口,管理这个地区的商品

public class BJFactory implements AbsFactory{

	@Override
	public Pizza createPizza(String orderType) {
		Pizza pizza=null;
		if (orderType.equals("cheese")) {
			pizza=new BJCheesePizza();
		}else if (orderType.equals("pepper")) {
			pizza=new BJPepperPizza();
		}
		return pizza;
	}

}

创建一个总的订单类管理上面两个工厂

package com.kun.gongchangchouxiang;

import java.util.Scanner;

public class OrderPizza {
	AbsFactory absFactory;
	public OrderPizza(AbsFactory absFactory) {
		setFactory(absFactory);
	}
	private void setFactory(AbsFactory absFactory) {
		Pizza pizza=null;
		String orderType="";
		this.absFactory=absFactory;
		do {
			orderType=gettype();
			pizza=absFactory.createPizza(orderType);
			if (pizza!=null) {
				pizza.prepare();
				pizza.bake();
				pizza.cut();
				pizza.box();
			}else {
				System.out.println("shi  bai");
				break;
			}
		} while (true);
	}
	private String gettype() {
		Scanner s= new Scanner(System.in);
		System.out.print("shuru : ");
		String type=s.next();
		return type;
	}
}

运行

public class PizzaStore {
	public static void main(String[] args) {
		new OrderPizza(new BJFactory());
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值