设计模式

This commit is contained in:
luoxiang 2019-12-01 18:32:43 +08:00
parent b42b937cdf
commit 6cd2987838
28 changed files with 250 additions and 12 deletions

View File

@ -0,0 +1,8 @@
package com.heibaiying.creational.abstract_factory;
/**
* 充电器
*/
public abstract class Charger {
public abstract void Charge(Phone phone);
}

View File

@ -0,0 +1,8 @@
package com.heibaiying.creational.abstract_factory;
public interface Factory {
Phone producePhone();
Charger produceCharger();
}

View File

@ -0,0 +1,8 @@
package com.heibaiying.creational.abstract_factory;
public class HuaiweiCharger extends Charger {
@Override
public void Charge(Phone phone) {
System.out.println("华为充电器给" + phone + "充电");
}
}

View File

@ -0,0 +1,11 @@
package com.heibaiying.creational.abstract_factory;
public class HuaweiPhone extends Phone {
public void call(String phoneNum) {
System.out.println("华为手机拨打电话:" + phoneNum);
}
@Override
public String toString() {
return "华为手机";
}
}

View File

@ -0,0 +1,14 @@
package com.heibaiying.creational.abstract_factory;
public class HuaweiPhoneFactory implements Factory {
@Override
public Phone producePhone() {
return new HuaweiPhone();
}
@Override
public Charger produceCharger() {
return new HuaiweiCharger();
}
}

View File

@ -1,8 +1,6 @@
package com.heibaiying.creational.SimpleFactory; package com.heibaiying.creational.abstract_factory;
/**
* 手机
*/
public abstract class Phone { public abstract class Phone {
public abstract void call(String phoneNum); public abstract void call(String phoneNum);
} }

View File

@ -0,0 +1,8 @@
package com.heibaiying.creational.abstract_factory;
public class XiaomiCharger extends Charger {
@Override
public void Charge(Phone phone) {
System.out.println("小米充电器给" + phone + "充电");
}
}

View File

@ -0,0 +1,12 @@
package com.heibaiying.creational.abstract_factory;
public class XiaomiPhone extends Phone {
public void call(String phoneNum) {
System.out.println("小米手机拨打电话:" + phoneNum);
}
@Override
public String toString() {
return "小米手机";
}
}

View File

@ -0,0 +1,14 @@
package com.heibaiying.creational.abstract_factory;
public class XiaomiPhoneFactory implements Factory {
@Override
public Phone producePhone() {
return new XiaomiPhone();
}
@Override
public Charger produceCharger() {
return new XiaomiCharger();
}
}

View File

@ -0,0 +1,10 @@
package com.heibaiying.creational.abstract_factory;
public class ZTest {
public static void main(String[] args) {
XiaomiPhoneFactory xiaomiPhoneFactory = new XiaomiPhoneFactory();
xiaomiPhoneFactory.produceCharger().Charge(xiaomiPhoneFactory.producePhone());
HuaweiPhoneFactory huaweiPhoneFactory = new HuaweiPhoneFactory();
huaweiPhoneFactory.produceCharger().Charge(huaweiPhoneFactory.producePhone());
}
}

View File

@ -0,0 +1,16 @@
package com.heibaiying.creational.builder;
public abstract class Builder {
protected Phone phone = new Phone();
public abstract void addProcessor();
public abstract void addCamera();
public abstract void addScreen();
public Phone produce() {
return phone;
}
}

View File

@ -0,0 +1,18 @@
package com.heibaiying.creational.builder;
public class HuaweiBuilder extends Builder {
@Override
public void addProcessor() {
phone.setProcessor("海思麒麟处理器");
}
@Override
public void addCamera() {
phone.setCamera("莱卡摄像头");
}
@Override
public void addScreen() {
phone.setScreen("OLED");
}
}

View File

@ -0,0 +1,17 @@
package com.heibaiying.creational.builder;
public class Manager {
private Builder builder;
public Manager(Builder builder) {
this.builder = builder;
}
public Phone buy() {
builder.addCamera();
builder.addProcessor();
builder.addScreen();
return builder.produce();
}
}

View File

@ -0,0 +1,14 @@
package com.heibaiying.creational.builder;
import lombok.Data;
@Data
public class Phone {
/*处理器*/
private String processor;
/*摄像头*/
private String camera;
/*屏幕*/
private String screen;
}

View File

@ -0,0 +1,18 @@
package com.heibaiying.creational.builder;
public class XiaomiBuilder extends Builder {
@Override
public void addProcessor() {
phone.setProcessor("高通骁龙处理器");
}
@Override
public void addCamera() {
phone.setCamera("索尼摄像头");
}
@Override
public void addScreen() {
phone.setScreen("OLED");
}
}

View File

@ -0,0 +1,10 @@
package com.heibaiying.creational.builder;
public class ZTest {
public static void main(String[] args) {
Phone huawei = new Manager(new HuaweiBuilder()).buy();
System.out.println(huawei);
Phone xiaomi = new Manager(new XiaomiBuilder()).buy();
System.out.println(xiaomi);
}
}

View File

@ -0,0 +1,5 @@
package com.heibaiying.creational.factory_method;
public interface Factory {
Phone produce();
}

View File

@ -1,5 +1,4 @@
package com.heibaiying.creational.SimpleFactory; package com.heibaiying.creational.factory_method;
public class HuaweiPhone extends Phone { public class HuaweiPhone extends Phone {
public void call(String phoneNum) { public void call(String phoneNum) {

View File

@ -0,0 +1,9 @@
package com.heibaiying.creational.factory_method;
public class HuaweiPhoneFactory implements Factory {
@Override
public Phone produce() {
return new HuaweiPhone();
}
}

View File

@ -0,0 +1,5 @@
package com.heibaiying.creational.factory_method;
public abstract class Phone {
public abstract void call(String phoneNum);
}

View File

@ -1,4 +1,4 @@
package com.heibaiying.creational.SimpleFactory; package com.heibaiying.creational.factory_method;
public class XiaomiPhone extends Phone { public class XiaomiPhone extends Phone {
public void call(String phoneNum) { public void call(String phoneNum) {

View File

@ -0,0 +1,9 @@
package com.heibaiying.creational.factory_method;
public class XiaomiPhoneFactory implements Factory {
@Override
public Phone produce() {
return new XiaomiPhone();
}
}

View File

@ -0,0 +1,10 @@
package com.heibaiying.creational.factory_method;
public class ZTest {
public static void main(String[] args) {
XiaomiPhoneFactory xiaomiPhoneFactory = new XiaomiPhoneFactory();
xiaomiPhoneFactory.produce().call("123");
HuaweiPhoneFactory huaweiPhoneFactory = new HuaweiPhoneFactory();
huaweiPhoneFactory.produce().call("456");
}
}

View File

@ -0,0 +1,7 @@
package com.heibaiying.creational.simple_factory;
public class HuaweiPhone extends Phone {
public void call(String phoneNum) {
System.out.println("华为手机拨打电话:" + phoneNum);
}
}

View File

@ -0,0 +1,5 @@
package com.heibaiying.creational.simple_factory;
public abstract class Phone {
public abstract void call(String phoneNum);
}

View File

@ -1,5 +1,4 @@
package com.heibaiying.creational.SimpleFactory; package com.heibaiying.creational.simple_factory;
public class PhoneFactory { public class PhoneFactory {

View File

@ -0,0 +1,7 @@
package com.heibaiying.creational.simple_factory;
public class XiaomiPhone extends Phone {
public void call(String phoneNum) {
System.out.println("小米手机拨打电话:" + phoneNum);
}
}

View File

@ -1,7 +1,6 @@
package com.heibaiying.creational.SimpleFactory; package com.heibaiying.creational.simple_factory;
public class ZTest {
public class Test {
public static void main(String[] args) { public static void main(String[] args) {
PhoneFactory phoneFactory = new PhoneFactory(); PhoneFactory phoneFactory = new PhoneFactory();
phoneFactory.getPhone("xiaomi").call("123"); phoneFactory.getPhone("xiaomi").call("123");