工厂模式(自己写的四不像)

package com.zjh.designmodel.creativemethod;

/* 自己写的四不像工厂类
工厂模式:应遵循开闭原则与迪米特法则
    开闭原则:对修改关闭 对拓展开放
    迪米特法则:思想是低耦合高内聚 对类的使用应最好是数据的返回而不是对整个类变成参数
 */
public class FactoryModel {
    public static void main(String[] args) {
    FruitsFactory<FruitTemplate> fruitsFactory=new FruitsFactory<FruitTemplate>() {
        @Override
        FruitTemplate buildNotParameter() {
            return new FruitTemplate();
        }

        @Override
        FruitTemplate buildParameter(String fruitName, String describe, Float singlePrice) {
            return new FruitTemplate(fruitName,describe,singlePrice);
        }
    };
    FruitTemplate fruitTemplate=fruitsFactory.buildParameter("橘子","鲜美多汁的橘子",15.67f);
    fruitTemplate.getFruitInfo();
    DefaultTangerineFruit fruitTemplate1 =(DefaultTangerineFruit) fruitsFactory.defaultFruit("DefaultTangerineFruit");
    fruitTemplate1.setDescribe("wc");
    fruitTemplate1.getFruitInfo();
    }
}
abstract class Fruit{//对某类型工厂要生产类的大致定义,使生产的类都具有这个基本信息
    private  String fruitName=null;
    private  String describe=null;
    private  Float singlePrice=0f;
    public Fruit(){

    }
    public Fruit(String fruitName, String describe, Float singlePrice) {
        this.fruitName = fruitName;
        this.describe = describe;
        this.singlePrice = singlePrice;
    }
    public String  getFruitName(){
        return this.fruitName;
    }

    public String getDescribe() {
        return describe;
    }

    public Float getSinglePrice() {
        return singlePrice;
    }

    public void setFruitName(String fruitName) {
        this.fruitName = fruitName;
    }

    public void setDescribe(String describe) {
        this.describe = describe;
    }

    public void setSinglePrice(Float singlePrice) {
        this.singlePrice = singlePrice;
    }

    public abstract void getFruitInfo();
}
class FruitTemplate extends Fruit {
    public FruitTemplate(){

    }
    public FruitTemplate(String name, String describe, Float singlePrice) {
        super(name, describe, singlePrice);
    }
    @Override
    public void getFruitInfo() {//拓展方法
        System.out.println("[水果:" + super.getFruitName() + "|描述:" + super.getDescribe() + "|单价:" + super.getSinglePrice() + "]");
    }
}
class DefaultTangerineFruit extends Fruit{
    private String productAddress=null;
    public DefaultTangerineFruit(){
        super.setFruitName("橘子");
    }
    public DefaultTangerineFruit( String describe, Float singlePrice, String productAddress) {
        super.setFruitName("橘子");
        super.setDescribe(describe);
        super.setSinglePrice(singlePrice);
        this.productAddress = productAddress;
    }

    public String getProductAddress() {
        return productAddress;
    }

    public void setProductAddress(String productAddress) {
        this.productAddress = productAddress;
    }
    @Override
    public void getFruitInfo() {
        System.out.println("[水果:" + super.getFruitName() + "|描述:" + super.getDescribe() + "|单价:"
                + super.getSinglePrice() + "|产出地址:"+this.productAddress+"]");
    }
}
abstract class FruitsFactory<T extends Fruit>{//对创建某类工厂的的定义,他可以拓展每个类(对类详细化)
     Object defaultFruit(String type){
         if(type.equals("DefaultTangerineFruit"))
         {
             return  new DefaultTangerineFruit();
         }
      return this.buildNotParameter();
    };
    Object defaultFruit(String type, String describe, Float singlePrice,String productAddress){
        if(type.equals("DefaultTangerineFruit"))
        {
            return  new DefaultTangerineFruit( describe,singlePrice,productAddress);
        }
        return this.buildParameter("",describe,singlePrice);
    };
    abstract T buildNotParameter();
    abstract T buildParameter(String fruitName, String describe, Float singlePrice);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值