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;
}
}
class CommonHouseBuilder extends HouseBuilder{
@Override
public void buildBasic() {
house.setBasic("普通房子打地基");
}
@Override
public void buildWalls() {
house.setWall("普通房子刷墙");
}
@Override
public void roofed() {
house.setRoofed("普通房子封顶");
}
}
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;
}
}
class CommonHouseBuilder extends HouseBuilder{
@Override
public void buildBasic() {
house.setBasic("普通房子打地基");
}
@Override
public void buildWalls() {
house.setWall("普通房子刷墙");
}
@Override
public void roofed() {
house.setRoofed("普通房子封顶");
}
}
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;
}
}
class CommonHouseBuilder extends HouseBuilder{
@Override
public void buildBasic() {
house.setBasic("普通房子打地基");
}
@Override
public void buildWalls() {
house.setWall("普通房子刷墙");
}
@Override
public void roofed() {
house.setRoofed("普通房子封顶");
}
}
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;
}
}
class CommonHouseBuilder extends HouseBuilder{
@Override
public void buildBasic() {
house.setBasic("普通房子打地基");
}
@Override
public void buildWalls() {
house.setWall("普通房子刷墙");
}
@Override
public void roofed() {
house.setRoofed("普通房子封顶");
}
}
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;
}
}
class CommonHouseBuilder extends HouseBuilder{
@Override
public void buildBasic() {
house.setBasic("普通房子打地基");
}
@Override
public void buildWalls() {
house.setWall("普通房子刷墙");
}
@Override
public void roofed() {
house.setRoofed("普通房子封顶");
}
}
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;
}
}
class CommonHouseBuilder extends HouseBuilder{
@Override
public void buildBasic() {
house.setBasic("普通房子打地基");
}
@Override
public void buildWalls() {
house.setWall("普通房子刷墙");
}
@Override
public void roofed() {
house.setRoofed("普通房子封顶");
}
}
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());
}
}