企业网站多大空间,做网站有哪些语言,监控视频怎么做直播网站,网站建设南昌作为一名程序员#xff0c;你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山#xff0c;或者被戏称为“面向保就业编程”。 以下面这个代码为例#xff0c;其中的问题也显而易见#xff0c;当越来越多的条件判断时#xff0c;代码会变得非常臃肿#xff0c;难…作为一名程序员你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山或者被戏称为“面向保就业编程”。 以下面这个代码为例其中的问题也显而易见当越来越多的条件判断时代码会变得非常臃肿难以维护。 String mediaType blogger;if (lxf.equals(mediaType)) {System.out.println(廖雪峰);} else if (JavaPub.equals(mediaType)) {System.out.println(知名博主);} else if (msb.equals(mediaType)) {System.out.println(马士兵);}...解决
怎么办呢
首先想到的一定是使用三目运算符但是问题也显而易见不能处理过多的情况。 int price condition?80:100;还有什么办法呢枚举定义、合并查询条件、java8 新特性 Optional 等等但是这些方法都治标不治本。当判断多了起来还是会变得臃肿。
策略模式
接下来就讲一下今天的推荐方案策略模式。 你一定不要排斥这种设计模式简单来看其实很简单。 策略模式是一种行为设计模式它允许你定义一系列算法并将每种算法分别放入独立的类中以使算法的对象能够相互替换。这句话可能有点绕我们来看一个具体的例子。
首先我们把每个条件逻辑代码块抽象成一个公共的接口可以得到以下代码 // 获取博主信息接口public interface IMediaService {void showMedia();}我们根据每个逻辑条件定义相对应的策略实现类可得以下代码 // LXF策略实现类public class LXFMediaServiceImpl implements IMediaService {Overridepublic void showMedia() {System.out.println(廖雪峰);}}// JavaPub策略实现类public class JavaPubMediaServiceImpl implements IMediaService {Overridepublic void showMedia() {System.out.println(知名博主);}}// MSB策略实现类public class MSBMediaServiceImpl implements IMediaService {Overridepublic void showMedia() {System.out.println(马士兵);}}接下来我们再定义策略工厂类用来管理这些博主信息实现策略类如下 // 博主信息服务工产类public class MediaServicesFactory {private static final MapString, IMediaService map new HashMap();static {map.put(lxf, new LXFMediaServiceImpl());map.put(JavaPub, new JavaPubMediaServiceImpl());map.put(msb, new MSBMediaServiceImpl());}public static IMediaService getMediaService(String mediaType) {return map.get(mediaType);}}使用了策略工厂模式之后代码变得简洁多了如下 public class Test {public static void main(String[] args) {String mediaType JavaPub;IMediaService mediaService MediaServicesFactory.getMediaService(mediaType);mediaService.showMedia();}}看到这里是不是很简单。
这样的好处也显而易见就是可以灵活的切换不同的博主信息比如
我想看JavaPub的信息只需要将mediaType设置为JavaPub即可。我想看马士兵的信息只需要将mediaType设置为msb即可。