当前位置: 首页 > news >正文

网站备案主体注销wordpress 添加页面模板

网站备案主体注销,wordpress 添加页面模板,网站开发语言 asp,台州网页设计招聘信息文章目录 引例状态模式理论状态模式代码优化结合享元模式并发问题解决 策略模式 VS 状态模式 引例 交通信号灯系统的设计与实现 方案一 传统设计方案 定义交通灯颜色的枚举 public enum LightColor { Green,Red,Yellow }交通灯类TrafficLight#xff0c;处理颜色转换等业务… 文章目录 引例状态模式理论状态模式代码优化结合享元模式并发问题解决 策略模式 VS 状态模式 引例 交通信号灯系统的设计与实现 方案一 传统设计方案 定义交通灯颜色的枚举 public enum LightColor { Green,Red,Yellow }交通灯类TrafficLight处理颜色转换等业务逻辑 public class TrafficLight{private LightColor lightColor;// 将信号灯初始化为红灯public TrafficLight(){lightColor LightColor.Red;}// 信号转换处理public void changeSignal(){if (lightColor LightColor.Red){System.out.println(红灯停);lightColor LightColor.Green;}else if (lightColor LightColor.Green){System.out.println(绿灯行);lightColor LightColor.Yellow;}else if (lightColor LightColor.Yellow){System.out.println(黄灯亮了等一等);lightColor LightColor.Red;}} }客户端类 public class Client{public static void main(String[] args){TrafficLight light new TrafficLight();light.changeSignal();light.changeSignal();light.changeSignal();} }运行结果为 红灯停 绿灯行 黄灯亮了等一等说明 TrafficLight类种的if-else条件分支违背开闭原则 方案二 参考策略模式进行修改 说明 将交通灯的展示即display()做成了策略因而策略类形成了层次类满足OCP具体类满足单一职责环境类引用策略完成展示和交通灯颜色切换 代码说明 交通灯层次类 public interface ITrafficLightStrategy {void display(); }public class RedLightStrategy implements ITrafficLightStrategy {Overridepublic void display() {System.out.println(红灯停);} }public class GreenLightStrategy implements ITrafficLightStrategy {Overridepublic void display() {System.out.println(绿灯行);} }public class YellowLightStrategy implements ITrafficLightStrategy {Overridepublic void display() {System.out.println(黄灯请等一等);} }环境类Context 在Context类中有一个ITrafficLightStrategy对象用于控制当前的交通灯颜色showSignal()方法显示changeSignalStrategy()方法改变交通灯 public class Context {private ITrafficLightStrategy trafficLightStrategy;public TrafficLight(ITrafficLightStrategy trafficLightStrategy) {this.signalStrategy signalStrategy;}public void showSignal() {if (signalStrategy ! null) { signalStrategy.displaySignal();}}public void changeSignalStrategy (ITrafficLightStrategy trafficLightStrategy) {this.signalStrategy signalStrategy;} }Client类实现 public class Client {public static void main(String[] args) {Context context new Context(new RedLightStrategy()); context.showSignal();context.changeSignalStrategy(new GreenLightStrategy());context.showSignal();context.changeSignalStrategy(new YellowLightStrategy());context.showSignal();} }说明在方案二的设计中交通灯的颜色切换实现是完全暴露给Client的不符合面向对象的封装特性 方案三 将每种颜色的灯做成一个类但又不能是像工厂方法模式那样的创建型模式因为三个灯从始至终都是没有改变的。 这里我们考虑把每种颜色的灯表达为一种状态 仔细看方案三和方案二的类图差别 在方案三的State.display(Context)方法中有一个Context对象作为参数传递这表示的是在display()方法中利用Context改变当前交通灯的状态。另外这也带来了Context类和ITrafficLightState层次类的双向依赖 交通灯的状态切换具体而言是在display()方法中加入以下语句 //在具体的状态子类中告诉环境对象Context下一个状态是谁。 context.changeCurrentSignal(new RedLightState());交通灯接口设计 public interface ITrafficLightState { void display(Context context); // 反向关联到Context取得系统的上下文环境 }Context类的设计相比于方案二changeSignal()方法中具体切换代码从Client类移动到了State类的display()方法中 public class Context {private ITrafficLightState currentState;public Context() {this.currentState new RedLightState();}public void showSignal() {if (currentState ! null) {currentState.display(this); // this表示当前context对象}}public void changeCurrentSignal(ITrafficLightState currentState) {this.currentState currentState;} }Client类的设计 public class Client {public static void main(String[] args) {Context context new Context();context.showSignal();context.showSignal();context.showSignal();} }状态模式理论 定义允许状态对象在其内部状态发生改变时改变其行为通过将抽象有状态的对象将复杂的状态改变“判断逻辑”提取到不同状态对象中实现 优点 解决switch-case、if-else带来的难以维护的问题代码结构清晰提高了扩展性 缺点 状态扩展导致状态类数量增多增加了系统复杂度使用不当将会导致逻辑的混乱不完全满足开闭原则增加或者删除状态类时需要修改涉及到的状态转移逻辑和对应的类 应用场景 一个操作的判断逻辑/行为取决于对象的内部状态时 状态模式代码优化 结合享元模式 对象重复创建问题 每次状态切换都需要创建一个新的状态对象而事实上一个状态对象完全可以只用一个枚举值标识这带来巨大的额外资源开销。 解决方法 单例模式 享元模式 享元模式代码示例新增一个Factory创建状态对象的工厂类在这个Factory类中维护着一个现有的ITrafficLightState状态层次类MapState类在需要new状态对象时调用Factory的getTrafficLight方法如果维护的map中有该类对象则直接返回如果没有则创建一个新的状态对象返回。由此来减少状态模式中的对象重复创建 public class TrafficLightStateFactory { //享元模式// 共享Mapprivate static MapClass, ITrafficLightState lights new HashMap();public static ITrafficLightState getTrafficLight(Class key) {if(!(lights.containsKey(key))) {try {lights.put(key, (ITrafficLightState) key.getDeclaredConstructor().newInstance());} catch (Exception e) {throw new RuntimeException(e);}}return lights.get(key);} } ConcreteState类的对应修改 public class GreenLightState implements ITrafficLightState {Overridepublic void display(Context context) throws Exception {System.out.println(绿灯行);context.changeCurrentSignal(TrafficLightStateFactory.getTrafficLight(YellowLightState.class));} }并发问题解决 由于状态是单例的可以在多个上下文之间共享。若状态类中持有其他资源就有产生并发问题的可能 于是我们可以看在前面的方案三设计中State层次类中对Context类的依赖是来自display()方法的参数而没有通过属性的方法持有Context对象的引用 策略模式 VS 状态模式 说明策略模式持有Context对象一般是需要使用context对象中的数据或方法如H5所述的使用Context对象的计时方法。
http://www.pierceye.com/news/969836/

相关文章:

  • 网站建设需要每年交钱吗如何选择宣传片制作
  • 建设网站为网站网站做广告芜湖市网站建设
  • 网站建设和维护怎么学android开发编辑wordpress
  • 有哪些学做衣服的网站生产管理软件app
  • 网站换域名 蜘蛛不来广告宣传片制作公司
  • 百度做个网站要多少钱如何在淘宝网做自己的网站
  • 网站建设属于营业范围里的哪一项深圳外贸建站网络推广联客易
  • 网站开发公司 郑州wordpress 服务器环境
  • 网站搭建什么意思砀山做网站
  • 营销型网站服务长沙做网站费用
  • 提供信息门户网站定制怎样做wordpress模板
  • 做爰小视频网站如何制作淘宝客网站
  • 公司架设网站费用怎么做分录linux网站开发软件
  • 网站可信图标精品网站建设费用 地址磐石网络
  • 朝阳住房和城乡建设厅网站学佛网站开发项目需求分析
  • 做快递单的网站会不会是骗人的网站推广营销收费
  • 网站设计师需要学什么wordpress focus
  • 查询网网站十大求职招聘app排行
  • 百度 搜索到手机网站wordpress百科汉化
  • 自己做的网站点击赚钱徐州万网网站建设
  • 网站定制生成器网页制作需要会哪些
  • 最重要的网站官方网站手机 优帮云
  • 建一个展示网站下班多少钱怎样给一个公司做网站改版
  • wordpress 网站死机php7.0 wordpress 设置
  • 免版权费自建网站自考本科官网
  • 使用ai做网站设计长沙建设网站哪家好
  • 建设行业网站价格公共服务标准化建设
  • 电商网站开发发展和前景网站建设案例多少钱
  • 网站建设特效代码做销售用什么网站
  • 如何做中英版网站上海到北京机票