package com.lyms.etl.start;
import com.lyms.etl.start.adapter.ForeignStudent;
import com.lyms.etl.start.adapter.ISpeak;
import com.lyms.etl.start.adapter.SpeakAdapter;
import com.lyms.etl.start.brige.G8Memory;
import com.lyms.etl.start.brige.HuaweiPhone;
import com.lyms.etl.start.brige.IPhone;
import com.lyms.etl.start.factorymethod.DatabaseLoggerFactory;
import com.lyms.etl.start.factorymethod.Logger;
import com.lyms.etl.start.factorymethod.LoggerFactory;
import com.lyms.etl.start.memento.Creater;
import com.lyms.etl.start.memento.Game;
import com.lyms.etl.start.memento.GameMemento;
import com.lyms.etl.start.observer.Observer;
import com.lyms.etl.start.observer.UserObserver;
import com.lyms.etl.start.observer.WechatServer;
import com.lyms.etl.start.proxy.CodeProxy;
import com.lyms.etl.start.proxy.CoderDynamicProxy;
import com.lyms.etl.start.proxy.ICoder;
import com.lyms.etl.start.proxy.JavaCoder;
import com.lyms.etl.start.singleton.Singleton;
import com.lyms.etl.start.singleton.SingletonEnum;
import com.lyms.etl.start.state.AirController;
import com.lyms.etl.start.strategy.PayStrategy;
import com.lyms.etl.start.strategy.Payer;
import com.lyms.etl.start.strategy.WxPay;
import com.lyms.etl.start.template.BsHouse;
import com.lyms.etl.start.template.HouseTemplate;
import com.lyms.etl.util.DateUtil;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Date;
/**
* Created by Administrator on 2020-03-25.
*/
public class Test {
public static void main(String[] args) {
// 枚举单例模式
// SingletonEnum singletonEnum = SingletonEnum.INSTANCE;
// SingletonEnum singletonEnum2 = SingletonEnum.INSTANCE;
// System.out.println(singletonEnum == singletonEnum2);
// //工厂方法
// LoggerFactory factory = new DatabaseLoggerFactory();
// Logger logger = factory.createLogger();
// logger.writeLog();
//适配器模式
ISpeak speak = new SpeakAdapter(new ForeignStudent("Jon"));
speak.speak();
speak.listen();
//装饰设计模式
// Driver d = new Driver();
// DecoratorDirver decoratorDirver = new DecoratorDirver(d);
// decoratorDirver = new DecoratorDirverA(decoratorDirver);
// decoratorDirver = new DecoratorDirverB(decoratorDirver);
// decoratorDirver.drive();
//代理模式
// ICoder coder = new JavaCoder();
// ICoder proxy = new CodeProxy(coder);
// proxy.code();
//要代理的真实对象
// ICoder coder = new JavaCoder();
// //创建中介类实例
// InvocationHandler handler = new CoderDynamicProxy(coder);
// ClassLoader classLoader = coder.getClass().getClassLoader();
// ICoder proxy = (ICoder)Proxy.newProxyInstance(classLoader, coder.getClass().getInterfaces(), handler);
// proxy.code();
// proxy.eat();
// //桥接模式
IPhone phone = new HuaweiPhone();
phone.setMemory(new G8Memory());
phone.buyPhone();
// //模板模式
// HouseTemplate build = new BsHouse("山顶别墅");
// build.buildHouse();
//
//
// //策略模式
// Payer payStrategy = new Payer();
// payStrategy.setPayStrategy(new WxPay());
// payStrategy.pay();
//状态模式 比如用户登录系统,在登录和注销的情况下发表评论、收藏等行为有着不同执行轨迹
// AirController controller = new AirController();
// controller.powerOn();
// controller.adjustTemp();
// controller.powerOff();
// controller.adjustTemp();
//观察者模式
// Observer userObserver = new UserObserver("张三");
// Observer userObserver1 = new UserObserver("李四");
// WechatServer server = new WechatServer();
// server.registerObsesrver(userObserver);
// server.registerObsesrver(userObserver1);
// server.notifyObserver();
// //备忘录模式
// Game game = new Game();
// game.setPlayStep(4);
// GameMemento gameMemento = game.saveGameMemento();
// Creater creater = new Creater();
// creater.setGameMemento(gameMemento);
// game.setPlayStep(0);
// game.recover(creater.getGameMemento());
// System.out.println(game.getPlayStep());
}
}