brand

死磕Lambda表达式(五):Comparator复合

拜拜、爱过 提交于 2020-03-30 11:26:46
给岁月以文明,而不是给文明以岁月。——《三体》 在上一篇文章( 传送门 )中介绍了JDK为我们提供的常用函数式接口,JDK不仅提供的这些函数式接口,其中一些接口还为我们提供了实用的默认方法,这次我们来介绍一下Comparator复合。 欢迎关注微信公众号: 万猫学社 ,每周一分享Java技术干货。 Comparator的使用 在之前文章的例子中,我们使用 Comparator.comparing 静态方法构建了一个 Comparator 接口的实例,我们再来简单介绍一下。先来看一下Mask类是怎么写的: package one.more.study; /** * 口罩 * @author 万猫学社 */ public class Mask { public Mask() { } public Mask(String brand, String type, double price) { this.brand = brand; this.type = type; this.price = price; } /** * 品牌 */ private String brand; /** * 类型 */ private String type; /** * 价格 */ private double price; public String getBrand() { return brand;

死磕Lambda表达式(四):常用的函数式接口

夙愿已清 提交于 2020-03-24 15:57:47
失去人性,失去很多;失去兽性,失去一切。——《三体》 在Java8支持Lambda表达式以后,为了满足Lambda表达式的一些典型使用场景,JDK为我们提供了大量常用的函数式接口。它们主要在 java.util.function 包中,下面简单介绍几个其中的接口及其使用示例。 Supplier接口 Supplier 接口是对象实例的提供者,定义了一个名叫 get 的抽象方法,它没有任何入参,并返回一个泛型T对象,具体源码如下: package java.util.function; @FunctionalInterface public interface Supplier<T> { T get(); } 源码比较简单,我们来个例子。这是一个之前提过的表示 口罩 的类: package one.more.study; /** * 口罩 */ public class Mask { public Mask(String brand, String type) { this.brand = brand; this.type = type; } /** * 品牌 */ private String brand; /** * 类型 */ private String type; public String getBrand() { return brand; } public void

TP5 网站获取访问用户的 IP, 地址 , 访问设备(手机还是PC)并返回手机类型和PC浏览器类型

天大地大妈咪最大 提交于 2020-03-06 16:17:16
我这个方法比较笨 , 但是有效果 , 百度很多都是有问题的 ,基本都是获取地址的API的问题, 我用的是TP , 所以我是把方法放在common中的 , 然后首页调用, 第一个 , 获取访客IP , 这个不多说 , 基本都行 //获取访客ip function getip() { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP") , "unknown")) { $ip = getenv("HTTP_CLIENT_IP"); } else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR") , "unknown")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR") , "unknown")) { $ip = getenv("REMOTE_ADDR"); } else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($

JAVA设计模式之桥接模式

て烟熏妆下的殇ゞ 提交于 2020-02-26 02:31:42
在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用 桥接模式 。而具体使用的方式,则 是将抽象部分与他们的实现部分分离,使得它们都可以独立的变化。 手机,不同品牌的手机有着类似的功能,假设现在都具有通讯录和游戏功能。或许我们会这样设计实现这样的关系: 这种结构下如果增加一个音乐功能,每个品牌类中都会增加一个新的音乐子类。如果新增一个品牌类,则需要新增一个新的品牌类,并且品牌类下还要对应增加各个功能的子类。 又或者是这个: 这种结构下新增品牌和功能同样需要很大的改动。 上述情况出现的主要原因是:对象的继承关系在编译时就已经确定,无法在运行时改变从父类继承的实现。子类的实现与他的父类有非常紧密的关系,以至于父类实现中的任何变化必然会导致子类的变化。当你需要复用子类时,父类的实现如果不适合解决新的问题,则父类必须重写或被其他更适合的类代替。这种依赖关系限制了灵活性并最终限制了复用性。 面向对象的设计中,还有一个重要的原则:合成/聚合复用原则---优先使用对象合成/聚合,而不是继承。 聚合 (Aggregation)表示一种弱的拥有关系,体现的是A对象可以包含B对象,但是B不是A对象的一部分。 合成 (Composition

设计模式--桥接模式

只愿长相守 提交于 2020-02-16 15:36:19
桥接模式 定义 :是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handler and Body)模式或接口(interface)模式。 图示 : =========》                                                      ||                                                     ||       《====== package com.offcn.designpattern.bridgepattern; public class BridgepatternDemo { public static void main(String[] args) { //联想台式机 Computer computer = new Desktop(new Lenovo()); computer.info(); //苹果笔记本 Computer computer1 = new Laptop(new Apple()); computer1.info(); } } //类型抽象类 abstract class Computer{ //组合,品牌  //使用protected,抽象类的子类可以使用该属性   protected Brand brand;

Scala学习笔记-08-样例类case 类

允我心安 提交于 2020-02-14 01:57:06
当定义一个类时,如果在class关键字前加上case关键字,则该类称为case类。 case类是一种特殊的类,它们经过优化以被用于模式匹配 Scala为case类自动重载了许多实用的方法,包括toString、equals和hashcode方法。 Scala为每一个case类自动生成一个 伴生对象 ,其包括模板代码 一个 apply 方法,因此,实例化case类的时候 无需使用new关键字 ; 一个 unapply 方法,该方法包含一个类型为伴生类的参数,返回的结果是 Option 类型,对应的类型参数是N元组,N是伴生类中主构造器参数的个数。Unapply方法用于对对象进行 解构 操作 在case类 模式匹配 中,该方法被自动调用,并将待匹配的对象作为参数传递给它 // 假设 定义一个case class:scala> case class Car(brand:String, price:Int) defined class Car //则 编译器自动生成伴生对象: scala> object Car{ | def apply(brand:String,price:Int) = new Car(brand,price) | def unapply(c:Car):Option[(String,Int)] = Some((c.brand,c.price)) | } defined

ECSHOP程序SEO完全优化

和自甴很熟 提交于 2020-02-09 07:31:31
一、完全自定义页面titile,完全抛弃Ecshop定义的页面title格式:[产品名称]_[分类名]_[网店名称]-Powered by ECShop 1、分析:大家都知道,titile,kewords,description在SEO中的基础性和重要性,但是ECshop官方给出的titile实现方法会出现很多类似或相同的页面title,另外还有部分页面无法自定义kewords和 description。在此本人给出了完全自定义的方法,其实方法很简单的,只要稍微懂得一点点代码的都会。 2、修改包括:品牌页,商品页,商品分类页,文章页,文章分类页 3、修改涉及的页面: 品牌页(增加title,keywords和description):brand.php、admin\brand.php、 admin\templates\brand_info.htm 商品页(增加title):goods.php、admin\goods.php、 admin\templates\goods_info.htm 商品分类页(增加title):category.php、admin\category.php、 admin\templates\category_info.htm 文章页面(增加title):article.php、admin\article.php、 admin\templates\article

python子类继承父类的构造函数

假装没事ソ 提交于 2020-02-04 09:05:09
‘’‘子类继承父类’’’ ```python class Frute(object): def __init__(self,name): self.name=name def info(self): print("u'水果的名字是:{0}".format(self.name)) class Apple(Frute): def __init__(self,name,brand,color): Frute.__init__(self,name) self.brand=brand self.color=color def info(self): print("水果是{0},品牌是{1},颜色是{2}".format(self.name,self.brand,self.color)) f1=Apple("苹果","红富士","红色") f1.info() C:\Programs\Python\Python35\python.exe D:/script/myobj.py 水果是苹果,品牌是红富士,颜色是红色 Process finished with exit code 0 ```python ```python ‘’‘子类不继承父类’’’ class Frute(object): def init (self,name): self.name=name def info(self):

作业(补)6

核能气质少年 提交于 2020-02-02 09:14:03
作业一、接口实现手机 原始的手机,可以发短信,通电话。随着发展,手机增加了功能:音频、视频播放、拍照、上网。使用接口实现手机功能; 首先创建手机父类: package com.phone.jiekou; public abstract class HandSet { private String brand; private String type; public HandSet() {} public HandSet(String brand,String type) { this.brand = brand; this.type = type; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getType() { return type; } public void setType(String type) { this.type = type; } public abstract void message(); public abstract void call(); 创建手机功能接口: 1、上网功能接口: package com.phone.jiekou; public

BeanFactory中Bean的生命周期

Deadly 提交于 2020-02-01 15:27:39
1.1 BeanFactory中bean生命周期图 具体过程如下: (1) 当调用者通过getBean(beanName)向容器中请求一个Bean时,如果容器注册了org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor 接口 则在实例化Bean之前调用接口的 postProcessBeforeInstantiation()方法 (2)根据配置情况调用Bean的构造方法或工厂方法实例化Bean (3)如果容器注册了InstantiationAwarePostProcessor接口,那么在实例化Bean之后,调用接口depostProcessAfterInstantiation()方法 ,可在这里对已经实例化的对象惊醒梳妆打扮 (4)如果Bean设置了属性信息,那么容器在这一步着手将配置信息设置到Bean对应的属性中,不过在调用每个属性之前将先调用InstantiationAwareBeanPostProcessor接口的postPropertyValues()方法 (5)调用Bean属性设置方法设置属性值 (6)如果Bean实现了org.springframework.beans.factory.BeanNameAware接口,则将调用setBeanName()方法