设计模式--原型模式和建造者模式

1、原型模式

package com.yqj.pattern.prototype.improve;

public class Sheep implements Cloneable {
    private String name;
    private int age;
    private String color;

    public Sheep(String name, int age, String color) {
        this.name = name;
        this.age = age;
        this.color = color;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Sheep{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", color='" + color + '\'' +
                '}';
    }

    @Override
    protected Object clone() {
        Object sheep = null;
        try {
            sheep = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return sheep;
    }
}

package com.yqj.pattern.prototype.improve;

public class Client {
    public static void main(String[] args) {
        Sheep sheep = new Sheep("tom", 1, "白色");
        Sheep sheep2 = (Sheep) sheep.clone();
        Sheep sheep3 = (Sheep) sheep.clone();
        System.out.println(sheep+" hashcode:"+sheep.hashCode());
        System.out.println(sheep2+" hashcode:"+sheep2.hashCode());
        System.out.println(sheep3+" hashcode:"+sheep3.hashCode());

    }
}



2、建造者模式

2.1

package com.yqj.pattern.builder.improve;

//产品
class House{
    private String basic;
    private String wall;
    private String roofed;

    public String getBasic() {
        return basic;
    }

    public void setBasic(String basic) {
        this.basic = basic;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getRoofed() {
        return roofed;
    }

    public void setRoofed(String roofed) {
        this.roofed = roofed;
    }

    @Override
    public String toString() {
        return "House{" +
                "basic='" + basic + '\'' +
                ", wall='" + wall + '\'' +
                ", roofed='" + roofed + '\'' +
                '}';
    }
}

//抽象建造者
abstract class HouseBuilder{
    protected House house = new House();
    //建造流程,定义有关的抽象方法
    public abstract void buildBasic();
    public abstract void buildWalls();
    public abstract void roofed();
    //建造好房子,返回产品
    public House buildHouse(){
        return house;
    }
}

//具体建造者1
class CommonHouseBuilder extends HouseBuilder{
    //实现具体的构建方法
    @Override
    public void buildBasic() {
        house.setBasic("普通房子打地基");
    }

    @Override
    public void buildWalls() {
        house.setWall("普通房子刷墙");
    }

    @Override
    public void roofed() {
        house.setRoofed("普通房子封顶");
    }
}

//具体建造者2
class HighBuilding extends HouseBuilder{

    @Override
    public void buildBasic() {
        house.setBasic("别墅打地基");
    }

    @Override
    public void buildWalls() {
        house.setWall("别墅刷墙");
    }

    @Override
    public void roofed() {
        house.setRoofed("别墅封顶");
    }
}



//指挥者
class HouseDirector{
    HouseBuilder houseBuilder;

    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    //制定产品的构建流程
    public House build(){
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.roofed();
        //返回产品
        return houseBuilder.buildHouse();
    }
}

//用户
public class Client{
    public static void main(String[] args) {
        HouseDirector director = new HouseDirector(new CommonHouseBuilder());
        System.out.println(director.build());
        //更改指挥者的构建产品
        director.setHouseBuilder(new HighBuilding());
        System.out.println(director.build());
    }
}
package com.yqj.pattern.builder.improve;

//产品
class House{
    private String basic;
    private String wall;
    private String roofed;

    public String getBasic() {
        return basic;
    }

    public void setBasic(String basic) {
        this.basic = basic;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getRoofed() {
        return roofed;
    }

    public void setRoofed(String roofed) {
        this.roofed = roofed;
    }

    @Override
    public String toString() {
        return "House{" +
                "basic='" + basic + '\'' +
                ", wall='" + wall + '\'' +
                ", roofed='" + roofed + '\'' +
                '}';
    }
}

//抽象建造者
abstract class HouseBuilder{
    protected House house = new House();
    //建造流程,定义有关的抽象方法
    public abstract void buildBasic();
    public abstract void buildWalls();
    public abstract void roofed();
    //建造好房子,返回产品
    public House buildHouse(){
        return house;
    }
}

//具体建造者1
class CommonHouseBuilder extends HouseBuilder{
    //实现具体的构建方法
    @Override
    public void buildBasic() {
        house.setBasic("普通房子打地基");
    }

    @Override
    public void buildWalls() {
        house.setWall("普通房子刷墙");
    }

    @Override
    public void roofed() {
        house.setRoofed("普通房子封顶");
    }
}

//具体建造者2
class HighBuilding extends HouseBuilder{

    @Override
    public void buildBasic() {
        house.setBasic("别墅打地基");
    }

    @Override
    public void buildWalls() {
        house.setWall("别墅刷墙");
    }

    @Override
    public void roofed() {
        house.setRoofed("别墅封顶");
    }
}



//指挥者
class HouseDirector{
    HouseBuilder houseBuilder;

    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    //制定产品的构建流程
    public House build(){
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.roofed();
        //返回产品
        return houseBuilder.buildHouse();
    }
}

//用户
public class Client{
    public static void main(String[] args) {
        HouseDirector director = new HouseDirector(new CommonHouseBuilder());
        System.out.println(director.build());
        //更改指挥者的构建产品
        director.setHouseBuilder(new HighBuilding());
        System.out.println(director.build());
    }
}
package com.yqj.pattern.builder.improve;

//产品
class House{
    private String basic;
    private String wall;
    private String roofed;

    public String getBasic() {
        return basic;
    }

    public void setBasic(String basic) {
        this.basic = basic;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getRoofed() {
        return roofed;
    }

    public void setRoofed(String roofed) {
        this.roofed = roofed;
    }

    @Override
    public String toString() {
        return "House{" +
                "basic='" + basic + '\'' +
                ", wall='" + wall + '\'' +
                ", roofed='" + roofed + '\'' +
                '}';
    }
}

//抽象建造者
abstract class HouseBuilder{
    protected House house = new House();
    //建造流程,定义有关的抽象方法
    public abstract void buildBasic();
    public abstract void buildWalls();
    public abstract void roofed();
    //建造好房子,返回产品
    public House buildHouse(){
        return house;
    }
}

//具体建造者1
class CommonHouseBuilder extends HouseBuilder{
    //实现具体的构建方法
    @Override
    public void buildBasic() {
        house.setBasic("普通房子打地基");
    }

    @Override
    public void buildWalls() {
        house.setWall("普通房子刷墙");
    }

    @Override
    public void roofed() {
        house.setRoofed("普通房子封顶");
    }
}

//具体建造者2
class HighBuilding extends HouseBuilder{

    @Override
    public void buildBasic() {
        house.setBasic("别墅打地基");
    }

    @Override
    public void buildWalls() {
        house.setWall("别墅刷墙");
    }

    @Override
    public void roofed() {
        house.setRoofed("别墅封顶");
    }
}



//指挥者
class HouseDirector{
    HouseBuilder houseBuilder;

    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    //制定产品的构建流程
    public House build(){
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.roofed();
        //返回产品
        return houseBuilder.buildHouse();
    }
}

//用户
public class Client{
    public static void main(String[] args) {
        HouseDirector director = new HouseDirector(new CommonHouseBuilder());
        System.out.println(director.build());
        //更改指挥者的构建产品
        director.setHouseBuilder(new HighBuilding());
        System.out.println(director.build());
    }
}
package com.yqj.pattern.builder.improve;

//产品
class House{
    private String basic;
    private String wall;
    private String roofed;

    public String getBasic() {
        return basic;
    }

    public void setBasic(String basic) {
        this.basic = basic;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getRoofed() {
        return roofed;
    }

    public void setRoofed(String roofed) {
        this.roofed = roofed;
    }

    @Override
    public String toString() {
        return "House{" +
                "basic='" + basic + '\'' +
                ", wall='" + wall + '\'' +
                ", roofed='" + roofed + '\'' +
                '}';
    }
}

//抽象建造者
abstract class HouseBuilder{
    protected House house = new House();
    //建造流程,定义有关的抽象方法
    public abstract void buildBasic();
    public abstract void buildWalls();
    public abstract void roofed();
    //建造好房子,返回产品
    public House buildHouse(){
        return house;
    }
}

//具体建造者1
class CommonHouseBuilder extends HouseBuilder{
    //实现具体的构建方法
    @Override
    public void buildBasic() {
        house.setBasic("普通房子打地基");
    }

    @Override
    public void buildWalls() {
        house.setWall("普通房子刷墙");
    }

    @Override
    public void roofed() {
        house.setRoofed("普通房子封顶");
    }
}

//具体建造者2
class HighBuilding extends HouseBuilder{

    @Override
    public void buildBasic() {
        house.setBasic("别墅打地基");
    }

    @Override
    public void buildWalls() {
        house.setWall("别墅刷墙");
    }

    @Override
    public void roofed() {
        house.setRoofed("别墅封顶");
    }
}



//指挥者
class HouseDirector{
    HouseBuilder houseBuilder;

    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    //制定产品的构建流程
    public House build(){
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.roofed();
        //返回产品
        return houseBuilder.buildHouse();
    }
}

//用户
public class Client{
    public static void main(String[] args) {
        HouseDirector director = new HouseDirector(new CommonHouseBuilder());
        System.out.println(director.build());
        //更改指挥者的构建产品
        director.setHouseBuilder(new HighBuilding());
        System.out.println(director.build());
    }
}
    package com.yqj.pattern.builder.improve;
    
    //产品
    class House{
        private String basic;
        private String wall;
        private String roofed;
    
        public String getBasic() {
            return basic;
        }
    
        public void setBasic(String basic) {
            this.basic = basic;
        }
    
        public String getWall() {
            return wall;
        }
    
        public void setWall(String wall) {
            this.wall = wall;
        }
    
        public String getRoofed() {
            return roofed;
        }
    
        public void setRoofed(String roofed) {
            this.roofed = roofed;
        }
    
        @Override
        public String toString() {
            return "House{" +
                    "basic='" + basic + '\'' +
                    ", wall='" + wall + '\'' +
                    ", roofed='" + roofed + '\'' +
                    '}';
        }
    }
    
    //抽象建造者
    abstract class HouseBuilder{
        protected House house = new House();
        //建造流程,定义有关的抽象方法
        public abstract void buildBasic();
        public abstract void buildWalls();
        public abstract void roofed();
        //建造好房子,返回产品
        public House buildHouse(){
            return house;
        }
    }
    
    //具体建造者1
    class CommonHouseBuilder extends HouseBuilder{
        //实现具体的构建方法
        @Override
        public void buildBasic() {
            house.setBasic("普通房子打地基");
        }
    
        @Override
        public void buildWalls() {
            house.setWall("普通房子刷墙");
        }
    
        @Override
        public void roofed() {
            house.setRoofed("普通房子封顶");
        }
    }
    
    //具体建造者2
    class HighBuilding extends HouseBuilder{
    
        @Override
        public void buildBasic() {
            house.setBasic("别墅打地基");
        }
    
        @Override
        public void buildWalls() {
            house.setWall("别墅刷墙");
        }
    
        @Override
        public void roofed() {
            house.setRoofed("别墅封顶");
        }
    }
    
    
    
    //指挥者
    class HouseDirector{
        HouseBuilder houseBuilder;
    
        public HouseDirector(HouseBuilder houseBuilder) {
            this.houseBuilder = houseBuilder;
        }
    
        public void setHouseBuilder(HouseBuilder houseBuilder) {
            this.houseBuilder = houseBuilder;
        }
    
        //制定产品的构建流程
        public House build(){
            houseBuilder.buildBasic();
            houseBuilder.buildWalls();
            houseBuilder.roofed();
            //返回产品
            return houseBuilder.buildHouse();
        }
    }
    
    //用户
    public class Client{
        public static void main(String[] args) {
            HouseDirector director = new HouseDirector(new CommonHouseBuilder());
            System.out.println(director.build());
            //更改指挥者的构建产品
            director.setHouseBuilder(new HighBuilding());
            System.out.println(director.build());
        }
    }
    package com.yqj.pattern.builder.improve;

    //产品
    class House{
        private String basic;
        private String wall;
        private String roofed;

        public String getBasic() {
            return basic;
        }

        public void setBasic(String basic) {
            this.basic = basic;
        }

        public String getWall() {
            return wall;
        }

        public void setWall(String wall) {
            this.wall = wall;
        }

        public String getRoofed() {
            return roofed;
        }

        public void setRoofed(String roofed) {
            this.roofed = roofed;
        }

        @Override
        public String toString() {
            return "House{" +
                    "basic='" + basic + '\'' +
                    ", wall='" + wall + '\'' +
                    ", roofed='" + roofed + '\'' +
                    '}';
        }
    }

    //抽象建造者
    abstract class HouseBuilder{
        protected House house = new House();
        //建造流程,定义有关的抽象方法
        public abstract void buildBasic();
        public abstract void buildWalls();
        public abstract void roofed();
        //建造好房子,返回产品
        public House buildHouse(){
            return house;
        }
    }

    //具体建造者1
    class CommonHouseBuilder extends HouseBuilder{
        //实现具体的构建方法
        @Override
        public void buildBasic() {
            house.setBasic("普通房子打地基");
        }

        @Override
        public void buildWalls() {
            house.setWall("普通房子刷墙");
        }

        @Override
        public void roofed() {
            house.setRoofed("普通房子封顶");
        }
    }
    
    //具体建造者2
    class HighBuilding extends HouseBuilder{

        @Override
        public void buildBasic() {
            house.setBasic("别墅打地基");
        }

        @Override
        public void buildWalls() {
            house.setWall("别墅刷墙");
        }

        @Override
        public void roofed() {
            house.setRoofed("别墅封顶");
        }
    }



    //指挥者
    class HouseDirector{
        HouseBuilder houseBuilder;

        public HouseDirector(HouseBuilder houseBuilder) {
            this.houseBuilder = houseBuilder;
        }

        public void setHouseBuilder(HouseBuilder houseBuilder) {
            this.houseBuilder = houseBuilder;
        }

        //制定产品的构建流程
        public House build(){
            houseBuilder.buildBasic();
            houseBuilder.buildWalls();
            houseBuilder.roofed();
            //返回产品
            return houseBuilder.buildHouse();
        }
    }

    //用户
    public class Client{
        public static void main(String[] args) {
            HouseDirector director = new HouseDirector(new CommonHouseBuilder());
            System.out.println(director.build());
            //更改指挥者的构建产品
            director.setHouseBuilder(new HighBuilding());
            System.out.println(director.build());
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值